package com.aaa.tars.service.impl;

import com.aaa.tars.dao.NoteImagesDao;
import com.aaa.tars.entity.noteImages;
import com.aaa.tars.service.NoteImagesService;
import com.aaa.tars.util.Page;
import com.aaa.tars.util.Result;
import com.aaa.tars.util.ResultUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.*;

/**
 * @FileName: NoteImagesServiceImpl
 * @Description: 游记图片服务实现类
 * @Author: 李宗盛
 * @CreateTime: 2025/9/17 20:42
 * @Version: 17
 */
@Service
public class NoteImagesServiceImpl implements NoteImagesService {
    @Resource
    private NoteImagesDao noteImagesDao;

    @Override
    public noteImages queryById(Integer imageId) {
        return noteImagesDao.queryByNoteId(imageId);
    }

    @Override
    public PageInfo queryByPage(Page<noteImages> Page) {
        //判断pageNo和pageSize 不能为空
        Integer pageNo=Page.getPageNo();
        Integer pageSize = Page.getPageSize();
        if (pageNo==null||pageNo==0||pageSize==null||pageSize==0){
            throw  new IllegalArgumentException("非法参数异常");}
        PageHelper.startPage(pageNo,pageSize);
        noteImages data=Page.getData();
        return  new PageInfo(noteImagesDao.queryAll(data));
    }

    @Override
    public int add(noteImages noteImages) {
        // 设置上传时间为当前时间
        noteImages.setUploadTime(new Date());
        return noteImagesDao.add(noteImages);
    }

    @Override
    public int update(noteImages noteImages) {
        return noteImagesDao.update(noteImages);
    }

    @Override
    public int deleteById(Integer imageId) {
        return noteImagesDao.deleteById(imageId);
    }
    
    /**
     * 上传游记图片
     * @param file 上传的文件
     * @return 上传结果和文件路径
     */
    @Override
    public Result uploadImage(MultipartFile file) {
        if (file.isEmpty()) {
            return ResultUtil.error("上传文件为空");
        }

        // 检查文件类型
        String contentType = file.getContentType();
        if (!"image/jpeg".equals(contentType) && !"image/png".equals(contentType)) {
            return ResultUtil.error("只允许上传JPG/PNG格式的图片");
        }

        // 检查文件大小（最大10MB）
        long size = file.getSize();
        if (size > 10 * 1024 * 1024) {
            return ResultUtil.error("图片大小不能超过10MB");
        }

        try {
            // 获取项目根目录下的resources/static/img/note目录 (源代码目录)
            String srcPath = System.getProperty("user.dir") + "/src/main/resources/static/img/noteImages/";
            File srcDir = new File(srcPath);
            if (!srcDir.exists()) {
                srcDir.mkdirs();
            }

            // 获取target/classes/static/img/note目录 (编译后目录)
            String targetPath = System.getProperty("user.dir") + "/target/classes/static/img/noteImages/";
            File targetDir = new File(targetPath);
            if (!targetDir.exists()) {
                targetDir.mkdirs();
            }

            // 生成唯一文件名
            String originalFilename = file.getOriginalFilename();
            String fileExtension = originalFilename != null ?
                    originalFilename.substring(originalFilename.lastIndexOf(".")) : ".jpg";
            String newFilename = UUID.randomUUID().toString().replace("-", "") + fileExtension;

            // 保存文件到源代码目录
            String srcFilePath = srcPath + newFilename;
            file.transferTo(new File(srcFilePath));

            // 复制文件到target目录
            Files.copy(
                    new File(srcFilePath).toPath(),
                    new File(targetPath + newFilename).toPath(),
                    StandardCopyOption.REPLACE_EXISTING
            );

            // 返回可访问的URL路径
            String urlPath = "/img/noteImages/" + newFilename;
            Map<String, String> data = new HashMap<>();
            data.put("url", urlPath);

            return ResultUtil.success(data);
        } catch (IOException e) {
            e.printStackTrace();
            return ResultUtil.error("文件上传失败: " + e.getMessage());
        }
    }
    
    /**
     * 批量上传游记图片
     * @param files 上传的文件列表
     * @return 上传结果和文件路径列表
     */
    public Result uploadImages(MultipartFile[] files) {
        if (files == null || files.length == 0) {
            return ResultUtil.error("上传文件为空");
        }
        
        // 限制最多上传5个文件
        if (files.length > 5) {
            return ResultUtil.error("最多只能上传5个文件");
        }
        
        Map<String, Object> resultData = new HashMap<>();
        resultData.put("count", files.length);
        
        List<String> urls = new ArrayList<>();
        
        for (MultipartFile file : files) {
            if (file.isEmpty()) {
                continue;
            }
            
            // 检查文件类型
            String contentType = file.getContentType();
            if (!"image/jpeg".equals(contentType) && !"image/png".equals(contentType)) {
                return ResultUtil.error("只允许上传JPG/PNG格式的图片");
            }

            // 检查文件大小（最大10MB）
            long size = file.getSize();
            if (size > 10 * 1024 * 1024) {
                return ResultUtil.error("图片大小不能超过10MB");
            }

            try {
                // 获取项目根目录下的resources/static/img/note目录 (源代码目录)
                String srcPath = System.getProperty("user.dir") + "/src/main/resources/static/img/noteImages/";
                File srcDir = new File(srcPath);
                if (!srcDir.exists()) {
                    srcDir.mkdirs();
                }

                // 获取target/classes/static/img/note目录 (编译后目录)
                String targetPath = System.getProperty("user.dir") + "/target/classes/static/img/noteImages/";
                File targetDir = new File(targetPath);
                if (!targetDir.exists()) {
                    targetDir.mkdirs();
                }

                // 生成唯一文件名
                String originalFilename = file.getOriginalFilename();
                String fileExtension = originalFilename != null ?
                        originalFilename.substring(originalFilename.lastIndexOf(".")) : ".jpg";
                String newFilename = UUID.randomUUID().toString().replace("-", "") + fileExtension;

                // 保存文件到源代码目录
                String srcFilePath = srcPath + newFilename;
                file.transferTo(new File(srcFilePath));

                // 复制文件到target目录
                Files.copy(
                        new File(srcFilePath).toPath(),
                        new File(targetPath + newFilename).toPath(),
                        StandardCopyOption.REPLACE_EXISTING
                );

                // 添加URL路径到列表
                String urlPath = "/img/noteImages/" + newFilename;
                urls.add(urlPath);
            } catch (IOException e) {
                e.printStackTrace();
                return ResultUtil.error("文件上传失败: " + e.getMessage());
            }
        }
        
        resultData.put("urls", urls);
        return ResultUtil.success(resultData);
    }
}